# -*- coding:utf-8 -*-
# Created by ibf at 2019/1/4 0004
# 数据库操作及数据模型构建
# orm 对象关系映射
from sqlalchemy import Column,String,Integer,Text,create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 把数据库操作改成了对于实例化对象操作
# 好处，请求数据库安全，并且不需要会sql语句，同时会根据你链接的数据，自动生成对应的sql语句。
# 可以防止"sql注入"

# 1.构建数据库链接串，并且建立数据库操作引擎
# mysql+链接方式://用户名:密码@主机名或主机ip地址/数据库名?其他配置参数
engine=create_engine('mysql+pymysql://root:root@127.0.0.1/zp_test?charset=utf8')
# 2.构建数据库对应的表，然后把表映射为类，字段映射为类属性
# a.创建对象的基类
Base=declarative_base()
# b.构建表模型
class ZpModel(Base):
    # 设置表的名  tablename 这不是一个必需填写的属性，如果不填写，把类名作为表的名字
    __tablename__='zp'

    # 设置字段，及其数据类型和属性
    id=Column(Integer,primary_key=True)
    zwmc=Column(String(100))# 职位名称
    gsmc=Column(String(100))# 公司名称
    min_zwyx=Column(Integer)# 最低薪资
    max_zwyx=Column(Integer)#最高薪资
    zwyx=Column(String(100))#职位月薪
    dd=Column(String(100))#工作地点
    fbrq=Column(String(100))#发表日期
    gsxz=Column(String(100))#公司性质
    gzjy=Column(String(100))#工作经验
    rzyq=Column(Text)#任职要求
    href=Column(String(100),nullable=False)#详细页面链接,不能为空值
    zwlb=Column(String(100))# 职位小类别
    zwlb_big=Column(String(100))# 职位大类别
    zprs=Column(String(100))# 招聘人数
    xl=Column(String(100))# 学历
    gsgm=Column(String(100))# 公司规模
    source=Column(String(100))# 来源
    gshy=Column(String(100))# 公司行业
    type=Column(String(100))# 职位类型（全职/兼职）
    category=Column(String(100))# 数据挖掘提供分类数据
    province=Column(String(100))# 省份
    pointx=Column(String(100))# 经度
    pointy=Column(String(100))# 纬度
    flxx=Column(String(100))#福利信息

# 3.调用sqlalchemy去自动生成数据库对应的表结构
class DB_Util(object):
    @staticmethod
    def get_session():
        Session=sessionmaker(bind=engine)
        session=Session()
        return session

    @staticmethod
    def init_db():
        Base.metadata.create_all(engine)
